Correction des exercices
5. Utilisateurs et groupes
- 5.3 - Dans votre deuxième terminal (en
root)- créez un utilisateur
r2d2avecuseraddplutôt queadduser:useradd r2d2suffit ici puisqu'on va le configurer après. - définissez un mot de passe pour l'utilisateur
r2d2à l'aide de la commandepasswd:passwd r2d2 - créez un groupe
droid:groupadd droid - ajoutez
r2d2au groupedroid:usermod -aG droid r2d2 - constatez que les infos de
r2d2et du groupedroidsont bien dans/etc/passwd,/etc/shadowet/etc/group
- créez un utilisateur
- 5.4 - Ouvrir un troisième terminal. Dedans, ouvrir un sous-shell en tant que
r2d2à l'aide des commandessudoet/ousu.- l'invite de commande obtenue est différente de celle de
r2d2etroot. Pourquoi ? (On pourra comparer le résultat de la commandeecho $SHELL) :sudo -u r2d2 -i - comment peut-on procéder pour changer le shell par défaut de
r2d2? (Indice: regarder/etc/passwd, ou bien la commandechsh)chsh -s /bin/bash r2d2 - regardez le résultat des commandes
whoami,idetgroupset comparez à ce que vous obtenez pour ces commandes dans le premier terminal (en tant que votre utilisateur initial)
- l'invite de commande obtenue est différente de celle de
- 5.5 - Inspectez le contenu de
/etc/sudoers:- en lisant les commentaires du fichier, chercher comment faire pour donner le droit à
r2d2d'utilisersudo - (après avoir fait la manip, n'oubliez pas de relancer le terminal/shell dans lequel vous êtes pour propager le changement!)
- depuis un shell en tant que
r2d2, validez que vous êtes en mesure de faire des commandes avecsudo(Par exemple:sudo ls -la /root/).
- en lisant les commentaires du fichier, chercher comment faire pour donner le droit à
- 5.6 - Constatez que les commandes executées avec
sudosont logguées dans le ficher/var/log/auth.log(on pourra utilisertailpour afficher seulement les dernières lignes du fichier) :sudo tail -f /var/log/auth.logpuis dans un autre terminal lancer un commande avecsudo
6. Permissions
Votre nom d'utilisateur sera remplacé par padawan dans la suite
- 6.1 : Faire
touch xwing.confpuisls -l xwing.confpour analyser les proprietaires et permissions actuelles. Changer le proprietaire/groupe si necessaire avecchown padawan:padawan xwing.conf. Reverifier les modifications avecls -l xwing.conf. Fairechmod o-r xwing.confdi nécessaire. - 6.2 :
touch private, puischmod ugo-rwx privatepar exemple (on peut aussi le faire en plusieurs étapes) - 6.3 :
chmod u+r private, puischmod ug+w private, puischmod +x private - 6.4 :
chmod ugo-rwx private(ouchmod 000 private) - 6.5 :
chmod 731 private(carrwx-wx--xs'écrit 731 en octal) - 6.6 :
chmod go-rx /home/<padawan>(padawanchanger pour votre utilisateur courant) - 6.7 :
chmod -R o-rwx ~/documentspar exemple - 6.8 : en tant que root :
mkdir /home/r2d2, puis en tant que root :chown r2d2 /home/r2d2puischmod go-rx /home/r2d2devrait suffir (eventuellement enlever lewaussi) - 6.9 :
touch /home/r2d2/droid.confpuis par exemplecd /home/r2d2etchown r2d2:droid ./droid.conf - 6.10 : (en étant dans
/home/r2d2/)touch beep.wav boop.wav blop.wavpuischown r2d2 *.wavet, par exemple,chmod go-x *.wavetchmod u+x *.wav - 6.11 :
mkdir secretspuistouch secrets/nsa.pdf(eventuellement mettre du texte danssecrets/nsa.pdf). Ensuite :chmod -r secrets/desactive le listage des fichiers danssecrets/... pourtant, il est possible de fairecat secrets/nsa.pdf! - 6.12 : Si l'on essaye de faire un
chownen tant quepadawan, le système refusera ! (On ne peut pas donner ses fichiers à quelqu'un d'autre) - 6.13 : (pour que cela fonctionne, il faut installer le paquet
aclavecapt install acl)setfacl -m g:droid:r-x /home/padawanpuis fairels -lsur le dossier et constater le+à la fin des permissions. On peut regarder le détails des ACL avecgetfacl /home/padawan - 6.14 :
setfacl -m u:<padawan>:r-x /home/r2d2
7. Processus
- 7.1 - Il faut lancer
ps -ef --forestet lire attentivement la sortie pour trouvercinnamon-session/xfce4-sessionet un processus nommébash(et/ougnome-terminal-serverqui devrait être le parent des processusbash). Trouver le processus qui consomme le plus de CPU et de RAM se fait avectop(utilisershift+Mpour trier par utilisation de la RAM). Dansps -ef --forest, il est possible aussi de trouver des processus qui tourne en tant que des utilisateurs système, tel quesystemd-*. - 7.2 - En utilisant l'url du programme, faire
wget https://url/du/programmepour le récupérer dans votre machine. Puis lancerbash fibonacci_forever.sh. - 7.3 - En ayant
bash fibonacci_forever.shqui tourne, faireCtrl+Zpuisbgpour mettre le programme en arrière plan. Confirmer avecjobsqu'il tourne bien en arrière plan. Notez que la sortie de la commande continue de s'afficher dans le terminal (bien que le programme n'a pas la main dessus) - 7.4 - Après avoir trouvé le PID avec
ps -ef --forest, fairekill PID. - 7.5 -
bash fibonacci_forever.sh &(notez le&à la fin de la commande) - 7.6 - Si l'on tue le shell (c'est-à-dire le processus
bashqui a lancé la commandebash fibonacci_forever.sh), alors cela tue complètement la fenêtre de terminal plutôt que juste l'execution defibonacci_forever.sh. - 7.7 - Lancez
screenet dedans,bash fibonacci_forever.sh. FaitesCtrl+ApuisDpour détacher la session. Eventuellementscreen -listpour lister les sessions screen. Depuis un autre terminal, faitesscreen -ret constatez que vous récupérez bien le shell ou vous aviez lancéfibonacci_forever.sh. - 7.8 - Après avoir trouvé le PID avec
ps -ef --forest, fairekill PID.
8. Personnaliser son environnement
- 8.1 : Un exemple de personnalisation de PS1 est :
PS1="[\033[01;32m\u on \h\033[0m:\033[01;34m\w\033[0m] \n> "
- 8.2 : Ajouter la ligne précédente en bas de
~/.bashrcà l'aide de nano puis recharger avecsource ~/.bashrc - 8.3 : Même chose que 8.2 mais en rajoutant une ligne comme :
echo "May the source be with you
- 8.4 : Ouvrir
/root/.bashrcavec nano (et possiblement sudo) puis rajouter une ligne pour modifier le PS1, comme :
PS1="[\033[01;31m\u on \h\033[0m:\033[01;34m\w\033[0m] \n> "
(noter la couleur '31' = rouge)
- 8.5 : Taper
llpour tester si la commande existe. Si elle n'existe pas, rajouteralias ll='ls -l'dans le bashrc puis le recharger avecsource. Pour s'assurer quelsutiliser--color=autopar défaut, taperalias ls. - 8.6 : Taper
alias suls='sudo ls -la'(par exemple) etalias sucat='sudo cat'. Tester en tant que padawan de tapersuls /rootetsucat /etc/shadow(ou d'autres dossiers / fichiers accessibles uniquement par root). - 8.7 :
alias r2d2="sudo su r2d2"puis tester de taperr2d2. - 8.8 : Se renseigner sur Internet ;P (question un peu 'extra')
- 8.9 :
alias ls="echo 'G pas envie'"
9 - redirections et assemblages
- 9.1 :
echo "hello" > hello.txt, puis fairecat hello.txtpour confirmer le résultat attendu - 9.2 :
echo "world" >> hello.txt, puis fairecat hello.txtpour confirmer le résultat attendu - 9.3 :
ls /usr/bin/ > files.tmplistpuisless files.tmplist - 9.4 :
bash fibonacci_forever.sh > suite_de_fibonacci, puisCtrl+Caprès quelques secondes, puiscat suite_de_fibonaccipour confirmer le résultat attendu - 9.4 : écrire
2+2,6\*7,10/3(sur plusieurs lignes) dans un fichiercalcul, puis fairebc < calcul - 9.5 :
bc <<< "6*7" - 9.6 :
mkdir -p ~/formation_linux/calculs; echo '6*7' > ~/formation_linux/calculs/formule; bc < ~/formation_linux/calculs/formule > ~/formation_linux/calculs/reponse - 9.7 :
curl -L fr.wikipedia.org > wikipedia.html >/dev/null 2>&1 || echo "ça n'a pas marché !" - 9.8 :
mkdir /tmp/chat/
touch /tmp/chat/chat
chmod +w /tmp/chat/chat
tail -f /tmp/chat/chat &
puis faire echo "beep boop" >> /tmp/chat/chat depuis d'autres terminaux (attention, il y a deux chevrons !).
Il est possible de créer l'alias say qui parle dans le chat avec :
alias say="echo [$USER] >> /tmp/chat/chat"
10 - pipes et boîte à outils
- 10.1 : utiliser
alias greppour verifier que l'alias existe, sinon ajouteralias grep="grep --color=auto"au.bashrcet le recharger. - 10.2 :
cat /etc/passwd | grep "/bin/bash" - 10.3 :
cat /etc/passwd | grep "/bin/bash" | tr ':' ' ' | awk '{print $1}'(on peut aussi utiliserawk -F:, ou la commandecut) - 10.4 :
cat /etc/passwd | grep "nologin$" | tr ':' ' ' | awk '{print $1}' - 10.5 : Les utilisateurs n'ayant pas de mot de passe sont typiquement caractérisés par un
:x:sur la ligne (ou eventuellement un:!:) dans/etc/shadow. On utilise alors un grep 'inversé' (-v) pour obtenir les lignes des utilisateurs qui ont vraiment un mot de passe. On utilise aussi un "ou" dans grep (avec\|) pour ignorer à la fois les lignes contenant:!:et:x:.
sudo cat /etc/shadow | grep -v ":\!:\|:x:" | awk -F: '{print $1}'
- 10.6 :
alias esquecestleweekend='date | grep "^Sat \|^Sun " >/dev/null && echo "Cest le weekend" && echo "Cest le weekend" || echo "Arg il faut encore taffer!"
- 10.7 : Les lignes vides correspondent à
^$(début de ligne suivi de fin de ligne) donc :cat /etc/login.defs | grep -v "^$"Pour enlever également les commentaires, on utilise un "ou" dans grep (\|), ce qui donne :cat /etc/login.defs | grep -v "^$\|^#" - 10.8 :
dpkg-query --status vim | grep -q 'Status: install ok installed' && echo Oui || echo Non - 10.9 :
grep -nr "daemon" /etc/ - 10.10 :
ps -ef | grep -v "UID" | awk '{print $1}' | sort | uniq -c - 10.11 :
cat loginattempts.log | awk '{print $9}' | sort | uniq -c | sort -n - 10.12 : Il s'agit d'un exercice un peu avancé avec plusieurs solutions possibles (qui ne sont pas trop robuste, mais peuvent dépanner). En voici une qui envoie les adresses des images dans un fichier
img.list:
curl www.wikimedia.org \
| grep "img src" \
| sed 's/img src/\n[img]/g' \
| grep "\[img\]" \
| tr '<>"' ' ' \
| awk '{print $2}' \
> img.list